package com.fanilycar51.mvp.manager;

import android.content.Context;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.fanilycar51.mvp.util.UiUtils;

import java.util.List;

/**
 * 创建日期：2017/8/12  12:34
 * 描述:用来管理BaseQuickAdapter和RecyclerView的封装类
 * 作者:张伟
 */

public class BqaManager {
    //正常加载
    public static final int NORML = 0X110;

    //下拉刷新
    public static final int PULLREFRESH = 0X120;
    //加载更多
    public static final int LOADINDGMORE = 0X130;

    /**
     * 设置RecyclerView的方法( 不带下拉刷新控件)
     * @param EmptyView 没有数据时显示的空视图
     * @param context   上下文对象
     * @param adapter   继承BaseQuickAdapter的自定义适配器
     * @param rv        RecyclerView控件
     * @param listener  加载更多的回调监听
     */
    public static void setRv(View EmptyView, Context context, BaseQuickAdapter adapter, RecyclerView rv, final OnloadingMoreListener listener) {
        //设置空的视图
        if (EmptyView != null) {
            adapter.setEmptyView(EmptyView);
        }
        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        if (rv != null) {
            rv.setLayoutManager(manager);
            rv.setAdapter(adapter);
        }
        //开启加载更多的功能
        adapter.setEnableLoadMore(true);

        //开启动画(默认为渐变效果)
        adapter.openLoadAnimation();
        if (listener != null) {
            adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
                @Override
                public void onLoadMoreRequested() {
                    if (listener != null) {
                        listener.onLoadMore();
                    }
                }
            }, rv);
        }
        //关闭默认第一次的回调, 在设置回调后调用该方法
//        strategyAdapter.disableLoadMoreIfNotFullPage();
    }

    /**
     * 设置RecyclerView的方法(带下拉刷新的控件)
     * @param EmptyView 没有数据时显示的空视图
     * @param spl       下拉刷新控件
     * @param context   上下文对象
     * @param adapter   继承BaseQuickAdapter的自定义适配器
     * @param rv        RecyclerView控件
     * @param listener  加载更多的回调监听
     */
    public static void setRv(View EmptyView, SwipeRefreshLayout spl, Context context, BaseQuickAdapter adapter, RecyclerView rv, final OnloadingMoreListener listener) {
        //设置空的视图
        if (EmptyView != null) {
            adapter.setEmptyView(EmptyView);
        }

        //关闭自带的下拉刷新
        if (spl != null) {
            spl.setRefreshing(false);
        }
        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        if (rv != null) {
            rv.setLayoutManager(manager);
            rv.setAdapter(adapter);
        }
        //开启加载更多的功能
        adapter.setEnableLoadMore(true);

        //开启动画(默认为渐变效果)
        adapter.openLoadAnimation();
        if (listener != null) {
            adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
                @Override
                public void onLoadMoreRequested() {
                    if (listener != null) {
                        listener.onLoadMore();
                    }
                }
            }, rv);
        }
        //关闭默认第一次的回调, 在设置回调后调用该方法
//        strategyAdapter.disableLoadMoreIfNotFullPage();
    }


    /**
     * 设置RecyclerView的方法
     *
     * @param EmptyView 没有数据时显示的空视图
     * @param flag      用于创建横向的布局管理器
     * @param context   上下文对象
     * @param adapter   继承BaseQuickAdapter的自定义适配器
     * @param rv        RecyclerView控件
     * @param listener  加载更多的回调监听
     */
    public static void setRv(View EmptyView, boolean flag, Context context, BaseQuickAdapter adapter, RecyclerView rv, final OnloadingMoreListener listener) {

        //设置空的视图
        if (EmptyView != null) {
            adapter.setEmptyView(EmptyView);
        }

        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
        rv.setLayoutManager(manager);
        rv.setAdapter(adapter);

        //开启加载更多的功能
        adapter.setEnableLoadMore(true);

        //开启动画(默认为渐变效果)
        adapter.openLoadAnimation();
        adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                if (listener != null) {
                    listener.onLoadMore();
                }
            }
        }, rv);

        //关闭默认第一次的回调, 在设置回调后调用该方法
//        strategyAdapter.disableLoadMoreIfNotFullPage();
    }

    /**
     * 定义的处理SwipeRefreshLayout下拉刷新后的数据更新的方法
     */
    public static <T> void updateRv(int method, SwipeRefreshLayout spl, RecyclerView xrv, List<T> oldDatas, List<T> newDatas, BaseQuickAdapter adapter) {
        if (newDatas == null) {
            //返回没有数据的情况
            if (method == PULLREFRESH) {
                //下拉刷新的时候没有数据的情况,关闭SwipeRefreshLayout的下拉刷新
                if (spl != null) {
                    spl.setRefreshing(false);
                }
            } else if (method == LOADINDGMORE) {
                //加载更多时没有数据的情况,停止加载更多
                adapter.loadMoreEnd();
            }
        } else {
            //返回有数据的情况
            //证明有数据
            //第一种情况:数据集合不为空,但是长度为0
            if (newDatas.size() == 0) {
                if (method == PULLREFRESH) {
                    //下拉刷新的时候没有数据的情况,停止下拉刷新
                    if (spl != null) {
                        spl.setRefreshing(false);
                    }
                } else if (method == LOADINDGMORE) {
                    //加载更多时没有数据的情况,停止加载更多
                    adapter.loadMoreEnd();
                }
            } else {
                //第二种情况:证明数据长度不为0
                //如果是下拉刷新,则先将原数据源的数据进行清空处理,然后在将新数据添加到数据源中,加载更多直接添加新数据即可
                if (method == PULLREFRESH) {
                    //下拉刷新
                    oldDatas.clear();
                    for (int i = 0; i < newDatas.size(); i++) {
                        oldDatas.add(newDatas.get(i));
                    }
                    //这里如果使用BaseRecyclerViewAdapterHelper必须重新设置setNewData,否则会出现数据加载完成后再次下拉刷新不能再次自动加载更多的情况
                    adapter.setNewData(oldDatas);
                } else {
                    //加载更多
                    adapter.addData(newDatas);
                }
                //如果是加载更多,设置加载完成
                if (method == PULLREFRESH) {
                    if (spl != null) {
                        spl.setRefreshing(false);
                    }
                }
                //如果是下拉刷新,设置下拉完成
                if (method == LOADINDGMORE) {
                    adapter.loadMoreComplete();
                }
            }
        }
    }

    /**
     * 当网络请求错误时对列表界面进行处理的方法
     *
     * @param method
     */
    public static void setErrorNet(int method, SwipeRefreshLayout spl, BaseQuickAdapter adapter) {
        if (method == PULLREFRESH || method == NORML) {
            //下拉刷新的时候关闭下拉刷新
            if (spl != null) {
                spl.setRefreshing(false);
            }
        } else if (method == LOADINDGMORE) {
            //加载更多的时候关闭加载更多
            adapter.loadMoreComplete();
        }
        UiUtils.Toast("网络错误", false);
    }

    /**
     * @param EmptyView
     * @param context
     * @param adapter
     * @param rv
     * @param listener
     * @param isGirdviewlayout 判断是否是GridView的布局管理器
     */
    public static void setRv(View EmptyView, Context context, BaseQuickAdapter adapter, RecyclerView rv, final OnloadingMoreListener listener, boolean isGirdviewlayout) {
        //设置空的视图
        adapter.setEmptyView(EmptyView);
        //设置布局管理器
        if (isGirdviewlayout) {
            GridLayoutManager manager = new GridLayoutManager(context, 2);
//            inearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
            rv.setLayoutManager(manager);
            rv.setAdapter(adapter);
        } else {
            LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
            rv.setLayoutManager(manager);
            rv.setAdapter(adapter);
        }


        //开启加载更多的功能
        adapter.setEnableLoadMore(true);

        //开启动画(默认为渐变效果)
        adapter.openLoadAnimation();
        adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                if (listener != null) {
                    listener.onLoadMore();
                }
            }
        }, rv);

        //关闭默认第一次的回调, 在设置回调后调用该方法
//        strategyAdapter.disableLoadMoreIfNotFullPage();
    }


}
